/*
 * @Description:
 * @Author: william
 * @Date: 2024-08-08 13:46:23
 * @LastEditors: william
 * @LastEditTime: 2025-07-05 09:41:49
 */
import { getCookieLang, setCookieLang } from '@/utils/cookies'
import { createI18n } from 'vue-i18n'
// 本地语言包
import enLocale from './package/en'
import zhLocale from './package/zh'

const messages = {
  zh: {
    ...zhLocale
  },
  en: {
    ...enLocale
  }
}

/**
 * @description 获取location的？后面的参数
 * @returns object
 */
export const getSrcParam = () => {
  // #ifdef H5
  let params = '?' + document.location.hash.split('?')[1],
    reg = /(?:^\?|&)(.*?)=(.*?)(?=&|$)/g,
    temp,
    args = {}
  while ((temp = reg.exec(params)) != null)
    args[temp[1]] = decodeURIComponent(temp[2])
  return args
  // #endif

  // #ifdef APP-PLUS
  return {
    lang: ''
  }
  // #endif
}

export const getLang = () => {
  /**
   * 优先级：
   * 1. 先看cookie中有没有；
   * 2. 然后再通过uni.getLocale()获取语言，看是否是你的应用所支持的语言，若是，则采用之；
   * 3. 最后才是使用回退语言（例如，比较通用的英语、中文）。
   */
  let lang = getSrcParam().lang || getCookieLang() || uni.getLocale()
  lang = Object.keys(messages).includes(lang) ? lang : 'zh'
  setCookieLang(lang) // 设置cookie
  return lang
}
const i18n = createI18n({
  legacy: false,
  locale: getLang(),
  fallbackLocale: 'zh', // 兜底中文
  messages: messages,
  globalInjection: true
})

// 全局注册 i18n
export const setupI18n = app => {
  app.use(i18n)
}

export const g_t = i18n.global.t

export default i18n
